package view;

import java.awt.BorderLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import functions.Client;
import functions.Server;
import functions.TextTransfer;

import robocopy.actions.MainAction;

import model.ClipMessage;
import model.Parceiro;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Cursor;

public class MainForm extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField txtAddNome;
	private JTextField txtAddIP;
	private JTextField txtAddPorta;
	private JComboBox<Parceiro> cmbParceiros;
	private Client client;
	
	
	public void run(){
		try{
			MainForm frame = new MainForm();
			frame.setVisible(true);
			if(MainAction.server==null || !MainAction.server.isAlive()){
				MainAction.server = new Server(MainAction.getUser().getPorta());
				MainAction.server.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the frame.
	 */
	
	public MainForm() {
		setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		setAlwaysOnTop(true);
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
			Window win = e.getWindow();
			win.setVisible(false);
			}
		});
		setResizable(false);
		setTitle("RoboCopy");
		setBounds(100, 100, 372, 237);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		contentPane.add(tabbedPane, BorderLayout.CENTER);
		
		JPanel panel = new JPanel();
		tabbedPane.addTab("Parceiros", null, panel, null);
		panel.setLayout(null);
		
		JLabel lblEscolhaOParceiro = new JLabel("Escolha o parceiro pra mandar seu clipboard");
		lblEscolhaOParceiro.setBounds(12, 12, 331, 15);
		panel.add(lblEscolhaOParceiro);
		
		JLabel lblNewLabel = new JLabel("Parceiro:");
		lblNewLabel.setBounds(12, 85, 70, 15);
		panel.add(lblNewLabel);
		
		cmbParceiros = new JComboBox<Parceiro>();
		cmbParceiros.setBounds(87, 72, 244, 40);
		panel.add(cmbParceiros);
		
		JButton btnEnviar = new JButton("Enviar clipboard");
		btnEnviar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				client = new Client((Parceiro)cmbParceiros.getSelectedItem());
				ClipMessage clip = new ClipMessage();
				clip.setCorpo(TextTransfer.getStringFromClipboard());
				clip.setParceiro(MainAction.getUser());
				client.send(clip);
			}
		});
		btnEnviar.setBounds(177, 133, 166, 25);
		panel.add(btnEnviar);
		
		JPanel panel_1 = new JPanel();
		tabbedPane.addTab("Adicionar Parceiros", null, panel_1, null);
		panel_1.setLayout(null);
		
		JLabel label = new JLabel("Novo Parceiro no RoboCopy");
		label.setBounds(12, 12, 243, 15);
		panel_1.add(label);
		
		JLabel label_1 = new JLabel("Nome:");
		label_1.setBounds(22, 41, 70, 15);
		panel_1.add(label_1);
		
		txtAddNome = new JTextField();
		txtAddNome.setColumns(10);
		txtAddNome.setBounds(75, 39, 220, 19);
		panel_1.add(txtAddNome);
		
		txtAddIP = new JTextField();
		txtAddIP.setColumns(10);
		txtAddIP.setBounds(75, 68, 114, 19);
		panel_1.add(txtAddIP);
		
		JLabel label_2 = new JLabel("IP:");
		label_2.setBounds(22, 70, 70, 15);
		panel_1.add(label_2);
		
		JLabel label_3 = new JLabel("Porta:");
		label_3.setBounds(22, 101, 70, 15);
		panel_1.add(label_3);
		
		txtAddPorta = new JTextField();
		txtAddPorta.setColumns(10);
		txtAddPorta.setBounds(75, 99, 114, 19);
		panel_1.add(txtAddPorta);
		
		JButton btnSalvar = new JButton("Salvar");
		btnSalvar.setBounds(226, 112, 117, 25);
		panel_1.add(btnSalvar);
		carregaCombo();
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Parceiro parceiro = new Parceiro();
				parceiro.setNome(txtAddNome.getText());
				parceiro.setIp(txtAddIP.getText());
				parceiro.setPorta(Integer.parseInt(txtAddPorta.getText()));
				MainAction.getUser().addParceiro(parceiro);
				JOptionPane.showMessageDialog(null, "Usuário Cadastrado!");
				carregaCombo();
				limpaCampos();
			}
		});		
	}
	
	public void limpaCampos(){
		txtAddIP.setText("");
		txtAddNome.setText("");
		txtAddPorta.setText("");
	}
	
	public void carregaCombo(){
		if(MainAction.getUser().getListaParceiros() != null){
			cmbParceiros.removeAllItems();
			for(Parceiro parceiro : MainAction.getUser().getListaParceiros()){
				cmbParceiros.addItem(parceiro);
			}
		}		
	}
	
}
